문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 C(프로그래밍 언어) (문단 편집) ====# MSVC 2019 이전까지 [[마이크로소프트]]의 C언어 지원 수준 #==== '''아래의 서술은 구버전 MSVC에서의 문제이다. [[https://docs.microsoft.com/ko-kr/cpp/overview/install-c17-support?view=msvc-170|MSVC 2019 (16.8) 이상은 C11/C17 표준을 완전하게 지원하며]] MSVC 2019 (16.8) 이후에는 적용되지 않는 내용이니 주의를 바란다.''' MSVC 2019 이전까지의 버젼에서, C는 사실상 반쯤 버려진 언어라 MS C++ 컴파일러로 컴파일한 코드에 CRT를 억지로 끼워 맞추는 수준에 가까웠다. 1999년에 확정된 C99마저 제대로 지원하지 않는 것은 MS의 개발 정책 때문이었다. 단순히 비표준 확장을 집어 넣어서 문제가 되는 것이 아니라, '''표준의 범위 내에서도 서로 충돌이 나는''' 것이 문제라서 꽤 골치 아픈 문제였다. 표준과 MS 제품과의 차이점을 정확히 알고, 이중으로 코드를 작성해야 했으니까... 국내 교재나 대학의 경우, 수강자가 친숙하고, 또한 예제를 따라하기 비교적 훨씬 쉬운 [[Microsoft Windows|윈도우]] + [[Visual Studio]] 기준으로 설명하는 경우가 많다. 그러나 [[Visual Studio|Visual Studio (MSVC)]] 컴파일러는 ANSI C를 기반으로 상당히 많은 비표준 확장을 제공하고 있으며, 표준에 어긋나 에러를 일으켜야 할 문장도 [[Visual Studio|MSVC]]는 어떻게든 실행을 해 버리기 때문에 초보자에게는 오히려 독이 됐다. [[GCC]] 역시 비표준 확장을 많이 제공하지만, 이후의 표준인 C99, C11에서 GCC의 비표준 확장이 대부분 표준화돼서 비교적 나은 편이다. 따라서 한동안은 웬만하면 GCC/Clang환경에서 표준으로 먼저 배우고 MSVC 등의 비표준 기능은 차후에 문서를 보고 따로 익히거나, 꼭 MSVC로 배우고 싶다면 표준과 비표준, 나아가서 가능하면 C89/C99의 기능을 구분해서 설명하는 교재로 배우는 것이 권장됐다. MSVC의 비표준 문법의 문제는 C언어뿐만이 아니라 [[C++]]에서도 나타나는데, C++가 아닌 MSVC 방언이라고 불릴 만큼 마이크로소프트는 표준 C++를 무시하고 있었다. GCC나 Clang에서 오류를 내는 익명 클래스의 모호한 상속, 표준 라이브러리의 fstream wstring 오버 라이드 등 수많은 문제를 만날 수 있었다. 최근 들어서는 MS도 이 문제를 인지하고 점차 개선하는 중이지만, 여전히 표준 준수에 대해서는 GCC, Clang에 비해 갈 길이 멀다. __cplusplus 매크로와 같은 경우에도 Visual Studio 2017에 와서야 해결이 된 만큼, 구형 MSVC에서 컴파일 되는 코드들이 (non-secure 함수를 제외하고서도) 클래스 또는 템플릿에서 오류를 내는 경우가 잦다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기